package com.ftg.learn.chapter03;

/**
 * 学习一下二分
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/5/13 下午2:51
 */
public class BinarySearch {

    /**
     * 假如说有一组 有序的数
     *
     * 利于后期维护
     *
     * @param start  开始
     * @param end    未尾
     * @param target 目标
     * @return true|false
     */
    public static boolean binarySearch(int start, int end, int target) {
        checkException(start, end);
        return binarySearchReal(start, end, target);
    }

    /**
     * 容错 处理
     *
     * @param start 开始
     * @param end   结束
     */
    private static void checkException(int start, int end) {
        if (start > end) {
            throw new RuntimeException("参数有问题");
        }
    }

    /**
     * 计算功能
     *
     * @param start  开始
     * @param end    未尾
     * @param target 目标
     * @return true|false
     */
    private static boolean binarySearchReal(int start, int end, int target) {

        if (start == end) {
            return start == target;
        }

        while (start <= end) {
            int middle = end + start >> 1;
            if (middle == target) {
                return true;
            } else if (middle < target) {
                start = middle + 1;
            } else {
                end = middle - 1;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        System.out.println(binarySearch(11, 10, 17));
    }

}
